#include <iostream>

using namespace std;

/*
 * 用法：reinterpret_cast<type_id> (expression)
 * 说明：
 * 1.type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。
 * 2.可以把一个指针转换成一个整数，也可以把一个整数转换成一个指针（先把一个指针转换成一个整数，在把该整数转换成原类型的指针，还可以得到原先的指针值）。
 * 3.最普通的用途就是在函数指针类型之间进行转换。
 * 4.在使用reinterpret_cast强制转换过程仅仅只是比特位的拷贝，因此在使用过程中需要特别谨慎！
 * 5.很难保证移植性。
 *
 * */

int doSomething()
{
	return 0;
}

int main(){
	// 定义一个函数指针
	typedef void(*funPtr)();
	// 定义一个长度为10的函数指针数组
	funPtr funPtrsArray[10];
	
	//编译错误类型不匹配
	//funPtrsArray[0] = doSomething();
	
	// doSomething函数指针，转化为funPtr指针，通过reinterpret_cast实现不同函数指针之间的转换
	funPtrsArray[0] = reinterpret_cast<funPtr>(&doSomething);

	cout << "------------------------------" << endl;

	int *a = new int;
	// 将int类型的指针转化成double类型的指针
	double *d = reinterpret_cast<double *>(a);
	cout << "a.p: " << a << endl;
	cout << "d.p: " << d << endl;

	return 0;
}
